/**
 *  JPanel mit dem man ein Exemplar Loeschen und Speeren kann.
 * 
 * 
 * Datei: PanelExemplarBearbeiten.java  Autor: Simon Schindelmann 
 * Datum: 07.12.11                      Version: 0.1
 * 
 */
package medienverwaltung.simulation;

import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import medienverwaltung.DatumParser;
import medienverwaltung.EAN13;
import medienverwaltung.Exemplar;
import medienverwaltung.Mediumverwalter;

public class PanelExemplarBearbeiten extends JPanel
{
  private static final long serialVersionUID = -4224949962825666766L;
  //Speichert die aktuelle Sprache die verwendet wird.
  private Uebersetzung uebersetzung = Uebersetzung.gibSprache ();
  private JLabel ean, ean2, ean3;
  private JTextField txt_eanL, txt_eanS, txt_eanE, statusL, statusS, 
    statusE;
  private JButton loeschen, sperren, entsperren;

  /**
   * Das Layout wird gesetzt und die Labels, Textfelder und Buttons 
   * werden initialisiert und dem JPanel hinzugefuegt.
   */
  public PanelExemplarBearbeiten ()
  {
    init ();
    setLayout (new GridLayout (3, 4));
    add (ean);
    add (txt_eanL);
    add (loeschen);
    add (statusL);
    add (ean2);
    add (txt_eanS);
    add (sperren);
    add (statusS);
    add (ean3);
    add (txt_eanE);
    add (entsperren);
    add (statusE);
  }


  /**
   * Hier werden die Labels, Textfelder, Buttons und ActionListener 
   * initialisiert.
   */
  public void init ()
  {
    ean = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Barcode") + ": ");
    ean2 = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Barcode") + ": ");
    ean3 = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Barcode") + ": ");
    txt_eanL = new JTextField ();
    txt_eanS = new JTextField ();
    txt_eanE = new JTextField ();
    statusL = new JTextField ();
    statusL.setEditable (false);
    statusS = new JTextField ();
    statusS.setEditable (false);
    statusE = new JTextField ();
    statusE.setEditable (false);
    loeschen = new JButton (uebersetzung.lokal
        .gibUebersetzung ("Loeschen"));
    sperren = new JButton (uebersetzung.lokal
        .gibUebersetzung ("Sperren"));
    entsperren = new JButton (uebersetzung.lokal
        .gibUebersetzung ("Entsperren"));

    loeschen.addActionListener (new ActionListener ()
    {
      public void actionPerformed (ActionEvent e)
      {
        try
        {
          exemplarLoeschen ();
        }
        catch (NullPointerException e1)
        {
          JOptionPane.showMessageDialog (null, uebersetzung.lokal
              .gibUebersetzung ("Dieses Exemplar existiert nicht"), ""
              + e1.getMessage (), JOptionPane.WARNING_MESSAGE);
        }
        catch (IllegalArgumentException e2)
        {
          JOptionPane.showMessageDialog (null, "" + e2.getMessage (),
              null, JOptionPane.WARNING_MESSAGE);
        }
      }
    });

    sperren.addActionListener (new ActionListener ()
    {
      public void actionPerformed (ActionEvent e)
      {
        try
        {
          exemplarSperren ();
        }
        catch (NullPointerException e1)
        {
          JOptionPane.showMessageDialog (null, uebersetzung.lokal
              .gibUebersetzung ("Dieses Exemplar existiert nicht"), ""
              + e1.getMessage (), JOptionPane.WARNING_MESSAGE);
        }
        catch (IllegalArgumentException e2)
        {
          JOptionPane.showMessageDialog (null, "" + e2.getMessage (),
              null, JOptionPane.WARNING_MESSAGE);
        }
      }
    });
    
    entsperren.addActionListener (new ActionListener ()
    {
      public void actionPerformed (ActionEvent e)
      {
        try
        {
          exemplarEntsperren ();
        }
        catch (NullPointerException e1)
        {
          JOptionPane.showMessageDialog (null, uebersetzung.lokal
              .gibUebersetzung ("Dieses Exemplar existiert nicht"), ""
              + e1.getMessage (), JOptionPane.WARNING_MESSAGE);
        }
        catch (IllegalArgumentException e2)
        {
          JOptionPane.showMessageDialog (null, "" + e2.getMessage (),
              null, JOptionPane.WARNING_MESSAGE);
        }
      }
    });
  }


  /**
   * Loeschen das Exemplars mit dem entsprechenden Barcode
   */
  public void exemplarLoeschen ()
  {
    EAN13 ean;
    Exemplar e;
    Mediumverwalter mv = new Mediumverwalter ();

    if (txt_eanL.getText ().isEmpty () == true)
    {
      statusL.setBackground (Color.red);
    }
    else
    {
      ean = new EAN13 (DatumParser.stringZuLong (txt_eanL.getText ()));
      e = mv.gibExemplar (ean);

      if (e.istAusgeliehen () == true)
      {
        JOptionPane.showMessageDialog (null, "" + uebersetzung.lokal
            .gibUebersetzung ("Exemplar kann nicht geloescht werden" +
            " da es ausgeliehen ist"), null, JOptionPane
            .WARNING_MESSAGE);
        statusL.setBackground (Color.red);
      }
      else
      {
        mv.exemplarLoeschen (ean);
        statusL.setBackground (Color.green);
      }
    }
  }


  /**
   * Sperrt das Exemplars mit dem entsprechenden Barcode
   */
  public void exemplarSperren ()
  {
    EAN13 ean;
    Exemplar e;
    Mediumverwalter mv = new Mediumverwalter ();

    if (txt_eanS.getText ().isEmpty () == true)
    {
      statusS.setBackground (Color.red);
    }
    else
    {
      ean = new EAN13 (DatumParser.stringZuLong (txt_eanS.getText ()));
      e = mv.gibExemplar (ean);
      
      if (e.istAusgeliehen () == true || e.istGesperrt () == true)
      {
        if (e.istAusgeliehen ())
        {
          JOptionPane.showMessageDialog (null, "" + uebersetzung.lokal
              .gibUebersetzung ("Exemplar kann nicht gesperrt werden " +
              "da es ausgeliehen ist"), null, JOptionPane
              .WARNING_MESSAGE);
          statusS.setBackground (Color.red);
        }
        else
        {
          JOptionPane.showMessageDialog (null, "" + uebersetzung.lokal
              .gibUebersetzung ("Exemplar ist schon gesperrt"), null, 
              JOptionPane.WARNING_MESSAGE);
          statusS.setBackground (Color.red);
        }      
      }
      else
      {      
      e.sperren ();
      statusS.setBackground (Color.green);
      }
    }
  }
  
  
  /**
   * Entsperrt das Exemplar mit den entsprechenden Barcode.
   */
  public void exemplarEntsperren ()
  {
    EAN13 ean;
    Exemplar e;
    Mediumverwalter mv = new Mediumverwalter ();

    if (txt_eanE.getText ().isEmpty () == true)
    {
      statusE.setBackground (Color.red);
    }
    else
    {
      ean = new EAN13 (DatumParser.stringZuLong (txt_eanE.getText ()));
      e = mv.gibExemplar (ean);
      if (e.istGesperrt () == false)
      {
        JOptionPane.showMessageDialog (null, "" + uebersetzung.lokal.
            gibUebersetzung ("Exemplar ist nicht gesperrt"), null, 
            JOptionPane.WARNING_MESSAGE);
        statusE.setBackground (Color.red);
      }
      else
      {      
        e.entsperren ();
        statusE.setBackground (Color.GREEN);
      }
    }
  }
}
